<?php

/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity
{
    
    private $_id;
    private $_user;
    Const ERROR_REGISTRATION_NOT_COMPLETED = 200;
 
    /**
     * Authenticates a user.
     * The example implementation makes sure if the username and password
     * are both 'demo'.
     * In practical applications, this should be changed to authenticate
     * against some persistent user identity storage (e.g. database).
     * @return boolean whether authentication succeeds.
     */
    public function authenticate()
    {
        $username=strtolower($this->username);
        $user=User::model()->find('LOWER(username)=?',array($username));
        if($user===null)
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        else if(!$user->validatePassword($this->password))
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        else if($user->registrationComplete==0)
            $this->errorCode=self::ERROR_REGISTRATION_NOT_COMPLETED;
        else
        {
            $this->setUser($user);
            
            $this->_id=$user->id;
            $this->username=$user->username;
            $this->errorCode=self::ERROR_NONE;

            // Store login timestamp
            $sql = sprintf(
                "UPDATE %s SET lastLoginTimestamp=UNIX_TIMESTAMP() WHERE id=%d",
                User::model()->tableSchema->name,
                $user->id
            );
            Yii::app()->db->createCommand($sql)->execute();
        }
        return $this->errorCode==self::ERROR_NONE;
    }
 
    public function getId()
    {
        return $this->_id;
    }

    public function getUser()
    {
        return $this->_user;
    }
 
    public function setUser(CActiveRecord $user)
    {
        $this->_user=$user->attributes;
    }
    
    
}
